ποΈGitΠ―ΡΠ°ποΈ
Node / meshtastic / Meshtastic-Android / files / core / takserver / src / commonTest / kotlin / org / meshtastic / core / takserver / XmlUtilsTest.kt
Displaying Raw β’ Download
core/takserver/src/commonTest/kotlin/org/meshtastic/core/takserver/XmlUtilsTest.kt 65a1f5ce4d0e4b8eafcd0bbfccafd41dc6ee888a (65a1f5ce) Text, 3.56 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.takserver
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72class T56d364XmlUtilsTest Tb4b4b4{
T8b949e// ββ xmlEscaped ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Tf0883e@Test
Tff7b72fun Td2a8ff`xmlEscaped leaves clean strings unchanged`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffHello WorldTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffHello WorldTa5d6ff"Tb4b4b4.Te6edf3xmlEscapedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`xmlEscaped escapes ampersand`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffA&BTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffA&BTa5d6ff"Tb4b4b4.Te6edf3xmlEscapedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`xmlEscaped escapes less-than`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff<tag>Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff<tag>Ta5d6ff"Tb4b4b4.Te6edf3xmlEscapedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`xmlEscaped escapes double quote`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffsay "hi"Ta5d6ff"Tb4b4b4, Ta5d6ff"""Ta5d6ffsay Ta5d6ff"Ta5d6ffhiTa5d6ff"""Ta5d6ff"Ta5d6ff.xmlEscaped())
}
@Test
fun `xmlEscaped escapes single quote`() {
assertEquals(Ta5d6ff"Tffa657itTff7b72&Te6edf3aposTb4b4b4;Te6edf3sTa5d6ff"Ta5d6ff, Ta5d6ff"Tffa657it'Te6edf3sTa5d6ff"Ta5d6ff.xmlEscaped())
}
@Test
fun `xmlEscaped escapes all special chars in one string`() {
assertEquals(Ta5d6ff"Tff7b72&Te6edf3ampTb4b4b4;Tff7b72&Te6edf3ltTb4b4b4;Tff7b72&Te6edf3gtTb4b4b4;Tff7b72&Te6edf3quotTb4b4b4;Tff7b72&Te6edf3aposTb4b4b4;Ta5d6ff"Ta5d6ff, Ta5d6ff"Tff7b72&Tff7b72<Tff7b72>\Ta5d6ff"Ta5d6ff'Ta5d6ff"Tb4b4b4.Te6edf3xmlEscapedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`xmlEscaped escapes ampersand before other entities to avoid double-escaping`Tb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// "&" in input should become "&amp;" β not "&" (which would be a double-escape bug)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff&amp;Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff&Ta5d6ff"Tb4b4b4.Te6edf3xmlEscapedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
T8b949e// ββ geoChatSenderUid ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatSenderUid extracts sender from GeoChat UID`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff!1234abcdTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffGeoChat.!1234abcd.All Chat Rooms.deadbeefTa5d6ff"Tb4b4b4.Te6edf3geoChatSenderUidTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatSenderUid returns original string for non-GeoChat UID`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff!1234abcdTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff!1234abcdTa5d6ff"Tb4b4b4.Te6edf3geoChatSenderUidTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatSenderUid handles missing second segment gracefully`Tb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// "GeoChat." splits into ["GeoChat", ""] β getOrElse(1) returns "" (empty second segment)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffGeoChat.Ta5d6ff"Tb4b4b4.Te6edf3geoChatSenderUidTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
T8b949e// ββ geoChatMessageId ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatMessageId extracts messageId from GeoChat UID`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffdeadbeefTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffGeoChat.!1234abcd.All Chat Rooms.deadbeefTa5d6ff"Tb4b4b4.Te6edf3geoChatMessageIdTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatMessageId returns original string for non-GeoChat UID`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff!1234abcdTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff!1234abcdTa5d6ff"Tb4b4b4.Te6edf3geoChatMessageIdTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatMessageId handles single-segment GeoChat UID gracefully`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3uid Tff7b72= Ta5d6ff"Ta5d6ffGeoChatTa5d6ff"
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffGeoChatTa5d6ff"Tb4b4b4, Te6edf3uidTb4b4b4.Te6edf3geoChatMessageIdTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.05s